package com.ktz.shoping.dao;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.ktz.shoping.bean.UserBean;
import com.ktz.shoping.db.DBDriver;
import com.ktz.shoping.db.DBDriverFactary;
import com.ktz.shoping.myutils.DateTimeConverter;

public class UserDao {
	/**

	 * 根据主键id获取管理员信息

	 * 

	 * @param strAdminId

	 *            主键id

	 * @return 管理员对象

	 */
	public UserBean getAdminInfoById(String strAdminId) {
		// 返回值

		UserBean adminB = new UserBean();
		// 验证查询的sql语句

		String strSql = "SELECT * FROM users WHERE isDelete = 0 AND userId = ?";
		// 执行查询操作

		adminB = DBDriverFactary.getDBDriverInstance().query(strSql, new BeanHandler<>(UserBean.class), strAdminId);
		// 返回

		return adminB;
	}
	/**

	 * 获取所有的管理员信息

	 * 

	 * @param sortType

	 *            排序类型：0 主键倒序排列，其他：主键正序排列

	 * @return

	 */
	public List<UserBean> getAllAdminInfo(int sortType) {
		// 返回值

		List<UserBean> lst = new ArrayList<>();
		// 验证查询的sql语句

		String strSql = "SELECT * FROM users WHERE isDelete = 0 ";
		// 设置排序标准

		if (sortType == 0) {
			strSql += " order by userId desc";
		}
		// 执行查询操作

		lst = DBDriverFactary.getDBDriverInstance().query(strSql, new BeanListHandler<>(UserBean.class));
		// 返回

		return lst;
	}
	public boolean isLogined(UserBean user) {
		boolean isLogined = true;
		DBDriver dbDriver = DBDriverFactary.getDBDriverInstance();
		String sql = "select * from users where username=? and password=?";
		List<UserBean> users = dbDriver.query(sql, new BeanListHandler<UserBean>(UserBean.class), user.getUsername(), user.getPassword());
		if (users.isEmpty()) {
			isLogined = false;
		}
		return isLogined;
	}
	public boolean isUpdate(UserBean user) {
		boolean isUpdated = true;
		DBDriver dbDriver = DBDriverFactary.getDBDriverInstance();
		String sql = "update users set password=? where username=? ";
		int result = dbDriver.update(sql,  user.getPassword(),user.getUsername());
		if (result!=0) {
			isUpdated = false;
		}
		return isUpdated;
	}
	/**

	 * 新增或修改管理员信息 新增和修改操作区别于：参数实体变量有没有主键字段

	 * 

	 * @param adminB

	 *            被修改的内容

	 * @return 修改操作结果

	 */
	public int saveOrUpdateAdminInfo(UserBean adminB) {
		// 返回值

		int iRe = 0;
		if (adminB != null) {
			// 操作的sql语句

			String strSql = "";
			// 操作的sql语句的参数

			Object[] params = {};
			// 主键字段为null，则是新增操作

			if (adminB.getUserId() == null) {
				// 新增操作

				// 保存处理的sql语句

				strSql = "INSERT INTO users (username,password,email,telphoneNumber,birthday,adminImg ) VALUES (?,?,?,?,?,?)";
				// 新增的参数数组

				params = new Object[] { adminB.getUsername(), adminB.getPassword(), adminB.getEmail(),
						adminB.getTelphoneNumber(), adminB.getBirthday(), adminB.getAdminImg() };
			} else {
				// 修改操作

				// 修改处理的sql语句

				strSql = "UPDATE users SET username =?,password =?,email =?,telphoneNumber =?,birthday =? ";
				// 判定是否需要修改图片内容

				if (adminB.getAdminImg() != null) {
					strSql += ",adminImg =? where userId =?";
					params = new Object[] { adminB.getUsername(), adminB.getPassword(), adminB.getEmail(),
							adminB.getTelphoneNumber(), adminB.getBirthday(), adminB.getAdminImg(),adminB.getUserId() };
				} else {
					strSql += " where userId =?";
					params = new Object[] { adminB.getUsername(), adminB.getPassword(), adminB.getEmail(),
							adminB.getTelphoneNumber(), adminB.getBirthday(), adminB.getUserId() };
				}
			}
			// 调用db层进行数据库保存

			iRe = DBDriverFactary.getDBDriverInstance().update(strSql, params);
		}
		// 返回

		return iRe;
	}
	/**

	 * 逻辑删除指定Id的数据记录

	 * 

	 * @param strAdminId

	 *            数据记录Id

	 * @return 删除操作的返回结果

	 */
	public int deleteAdminInfoById(String strAdminId) {
		// 返回值

		int iRe = 0;
		// 采用逻辑删除：修改状态为字段即可， 0-未删除，1-已删除

		// 修改操作

		// 修改处理的sql语句

		String strSql = " UPDATE users SET isDelete = 1 where userId =? ";
		// 操作的sql语句的参数

		Object[] params = { strAdminId };
		// 调用db层进行数据库保存

		iRe = DBDriverFactary.getDBDriverInstance().update(strSql, params);
		// 返回

		return iRe;
	}
}
